import { verifyToken } from '../utils/auth'

export default defineEventHandler(async (event) => {
  // 获取请求路径
  const path = getRequestURL(event).pathname
  
  // 定义不需要认证的公共路径（使用更灵活的匹配）
  const publicPaths = [
    '/api/auth/login',
    '/api/auth/register',
    '/login',
    '/'
    // 可以添加其他公共API路径
  ]
  
  // 改进的路径匹配逻辑：检查是否以公共路径开头
  const isPublicPath = publicPaths.some(publicPath => 
    path.startsWith(publicPath)
  )
  
  if (isPublicPath) {
    // 公共路径，跳过认证
    return 
  }
  
  // 检查 Authorization 头
  const authHeader = getHeader(event, 'authorization')
  
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    throw createError({
      statusCode: 401,
      statusMessage: 'Unauthorized',
      message: '未提供有效的认证令牌。请检查Authorization头格式是否正确：Bearer <token>'
    })
  }
  
  try {
    const token = authHeader.slice(7)
    const decoded = verifyToken(token)
    
    if (!decoded) {
      throw createError({
        statusCode: 401,
        statusMessage: 'Unauthorized',
        message: '认证令牌无效或已过期'
      })
    }
    
    // 将用户信息添加到上下文中，供后续处理程序使用
    event.context.user = decoded
    
  } catch (error) {
    // 统一处理验证过程中可能出现的异常
    throw createError({
      statusCode: 401,
      statusMessage: 'Unauthorized',
      message: '令牌验证失败：' + error
    })
  }
})